package com.travel.Controller.User;


import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.travel.Config.AliPayConfig;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
public class AliPayController {




    @RequestMapping("/pay")

    public void payController(HttpServletRequest request, HttpServletResponse response) throws IOException {

        //获得初始化的AlipayClient

        AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.GATEWAYURL, AliPayConfig.APP_ID, AliPayConfig.MERCHANT_PRIVATE_KEY, "json", AliPayConfig.CHARSET, AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.SIGN_TYPE);



        //设置请求参数

        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();

        alipayRequest.setReturnUrl(AliPayConfig.return_url);

        alipayRequest.setNotifyUrl(AliPayConfig.notify_url);



        //商户订单号，商户网站订单系统中唯一订单号，必填

        String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");

        //付款金额，必填

        String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");

        //订单名称，必填

        String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");

        //商品描述，可空

        String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");



        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","

                + "\"total_amount\":\""+ total_amount +"\","

                + "\"subject\":\""+ subject +"\","

                + "\"body\":\""+ body +"\","

                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");



        //若想给BizContent增加其他可选请求参数，以增加自定义超时时间参数timeout_express来举例说明

        //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","

        //      + "\"total_amount\":\""+ total_amount +"\","

        //      + "\"subject\":\""+ subject +"\","

        //      + "\"body\":\""+ body +"\","

        //      + "\"timeout_express\":\"10m\","

        //      + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        //请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节



        //请求

        String form="";

        try {

            form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单

        } catch (AlipayApiException e) {

            e.printStackTrace();

        }

        response.setContentType("text/html;charset=" + AliPayConfig.CHARSET);

        response.getWriter().write(form);//直接将完整的表单html输出到页面

        response.getWriter().flush();

        response.getWriter().close();

    }



    @RequestMapping("PayYes")
    public ModelAndView PayYes(){
        return new ModelAndView("PayY");
    }


    @RequestMapping("PayNo")
    public ModelAndView PayNo(){
        return new ModelAndView("PayN");
    }

}
